
import axios from 'axios'
import type { InternalAxiosRequestConfig } from 'axios'
import { Toast } from '/@/utils/Message'
import router from "../router/index"
import { showDialog } from 'vant';
import eventEmitter from '../utils/eventEmitter';
import { jstJointLogin } from "/@/api/jst/h.ts"
import { log } from 'node:console';

// import { clearCookieToken } from '/@/utils/cookieMethods'
// 创建 axios 实例
const request = axios.create({
    // API 请求的默认前缀
    // baseURL:"/prod-api",
    // baseURL: import.meta.env.VITE_APP_API_BASE_URL as string | undefined,   
    timeout: 60000 // 请求超时时间
})
request.defaults.headers.post['Content-Type'] = 'application/json'
// 异常拦截处理器
const errorHandler = (error:{message:string}) => {
    // console.log(`err${error}`)
    Toast("出错啦！")   
    return Promise.reject(error)
}
const successHandle = (status,data) => { // 500状态码的错误信息
    switch (status) {
    case 200:
        if(data.data.code == "901" || data.data.code == "902" || data.data.code == "903" || data.data.code == "905") {
            Toast(data.data.msg)
            // clearCookieToken()     
        }  
        if(data.data.code == "43027") {
           // 后端截取流程出错，需要退出整个任务
            showDialog({
                title: '异常提醒',
                message: '抱歉，此链接已被其他用户占用，请您联系邀请人咨询具体情况',
            }).then(() => {
                  
            });
              // // 利用事件的发布和订阅模式，加中间层，以事件的方式驱动
            // // 当请求反馈43027时，发送一个事件，其他的模块监听到相应事件后，做出相应的处理。自己进行耦合
            // eventEmitter.emit('API:UN_AUTH')
        }  
        break
    case 411:
        // 退出登录并跳转到登录页面
        // clearCookieToken()   
        break
    case 403:
        // token 失效
        // clearCookieToken()   
        break
    case 400:
        // token 失效
        // clearCookieToken()
        if(data.data?.data?.redirectUri) {
            window.location.href = data.data.data.redirectUri
        }
        break
    default:
        console.log(data)  
    }
}
// request interceptor
request.interceptors.request.use((config: InternalAxiosRequestConfig) => {
  const token = sessionStorage.getItem('token')  
  const userAgent = navigator.userAgent;
  config.headers.ua = `${userAgent}${document.body.clientWidth}`
  config.headers.token = `Bearer${token}`
    if(sessionStorage.getItem('token')){
        token && (config.headers.Authorization = `Bearer${token}`) 
    }
    return config    
}, errorHandler)

request.defaults.validateStatus = function(status) { // 修改状态码为小500走then
    return status < 500
}
// response interceptor
 request.interceptors.response.use(async(res:any) => {
    if(res.status < 500) {
        if(res.data.code == '401'){
            sessionStorage.removeItem('token')
            router.push({ path: '/login'}) 
        }
        successHandle(res.status, res)
        return Promise.resolve(res.data)
    }else {
        Promise.reject(res.data)
    }
}, (err: any) => {
   
})

export default request